﻿Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraPrinting
Imports Control_Vuelos_BE
Imports Control_Vuelos_BL

Public Class frmAdm_ProgramaViaje
    Inherits frmBaseMantenimiento

    Public printingSystem1 As New PrintingSystem()
    Public printableComponentLink1 As New PrintableComponentLink()
    ReadOnly vMaestrosBL As New MaestrosBL()
    ReadOnly vProViaBL As New ProgramaViajeBL()
    Dim vProViaBE As New V_ProgramaViajeBE
    Dim tbAerol, tbRuta, tbEstado, tbContratante, tbTipo As New DataTable
    Dim nopc As Integer = 0

    Private Sub frmAdm_ProgramaViaje_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        AddHandler BarBtnAgregar.ItemClick, AddressOf prl_RegistroNuevo
        AddHandler BarBtnModificar.ItemClick, AddressOf prl_RegistroModificar
        AddHandler BarBtnEliminar.ItemClick, AddressOf prl_RegistroDardeBaja
        AddHandler BarBtnGrabar.ItemClick, AddressOf prl_RegistroGrabar
        AddHandler BarBtnCancelar.ItemClick, AddressOf prl_RegistroCancelar
        AddHandler BarBtnRefresh.ItemClick, AddressOf prl_CargarLista
        AddHandler BarBtnImprimir.ItemClick, AddressOf prl_Imprimir
        AddHandler UcViaje1.cboCiaAviacion.EditValueChanged, AddressOf prl_CargarTipoVuelo
        AddHandler UcViaje1.cboTipoVuelo.EditValueChanged, AddressOf prl_CargarCupos
        AddHandler UcViaje1.cboOrigen.LostFocus, AddressOf prl_CrearCodigo
        AddHandler UcViaje1.GridView1.FocusedRowChanged, AddressOf prl_CambioRegistro

        printingSystem1.Links.AddRange(New Object() {printableComponentLink1})
        printableComponentLink1.Component = UcViaje1.GridControl1
        printableComponentLink1.Landscape = True

        prl_InicializarBoton(False)
        prl_CargarCombos()
        prl_EstadoCajas(True)
        prl_CargarLista()
        SLTitulo.Text = "Mantenimiento de Vuelos"
    End Sub

#Region "Inicializacion"

    Private Sub prl_InicializarBoton(ByVal lFlag As Boolean)
        BarBtnAgregar.Enabled = Not lFlag
        BarBtnModificar.Enabled = Not lFlag
        BarBtnEliminar.Enabled = Not lFlag
        BarBtnRefresh.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
        BarBtnCancelar.Enabled = lFlag
        BarBtnGrabar.Enabled = lFlag
    End Sub

    Private Sub prl_CargarCombos()
        ' cargo el contratante del vuelo
        tbContratante = vMaestrosBL.pr_GetContratante()
        UcViaje1.cboContratante.Properties.DataSource = tbContratante
        UcViaje1.cboContratante.Properties.DisplayMember = "desContrataViaje"
        UcViaje1.cboContratante.Properties.ValueMember = "codContrataViaje"
        UcViaje1.cboContratante.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("codContrataViaje", 20, "Tipo"))
        UcViaje1.cboContratante.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("desContrataViaje", 100, "Descripción"))
        UcViaje1.cboContratante.Properties.BestFit()
        UcViaje1.cboContratante.Properties.PopupWidth = 300
        UcViaje1.cboContratante.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboContratante.Properties.AutoSearchColumnIndex = 1
        ' Origen/Destino
        tbRuta = vMaestrosBL.pr_GetRutaVuelo(p_coduser)
        UcViaje1.cboOrigen.Properties.DataSource = tbRuta
        UcViaje1.cboOrigen.Properties.DisplayMember = "descripcion"
        UcViaje1.cboOrigen.Properties.ValueMember = "codigo"
        UcViaje1.cboOrigen.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("codigo", 50, "Origen/Destino"))
        UcViaje1.cboOrigen.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("descripcion", 200, "Descripción"))
        UcViaje1.cboOrigen.Properties.BestFit()
        UcViaje1.cboOrigen.Properties.PopupWidth = 300
        UcViaje1.cboOrigen.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboOrigen.Properties.AutoSearchColumnIndex = 1
        ' Cia de aviacion
        tbAerol = vMaestrosBL.pr_GetAerolinea()
        UcViaje1.cboCiaAviacion.Properties.DataSource = tbAerol
        UcViaje1.cboCiaAviacion.Properties.DisplayMember = "NomEmpresa"
        UcViaje1.cboCiaAviacion.Properties.ValueMember = "CodEmpresa"
        UcViaje1.cboCiaAviacion.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("CodEmpresa", 20, "Aerolinea"))
        UcViaje1.cboCiaAviacion.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("NomEmpresa", 100, "Descripción"))
        UcViaje1.cboCiaAviacion.Properties.BestFit()
        UcViaje1.cboCiaAviacion.Properties.PopupWidth = 300
        UcViaje1.cboCiaAviacion.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboCiaAviacion.Properties.AutoSearchColumnIndex = 1
        ' Tipo de vuelo por default le asigno la primera cia. de aviacion
        tbTipo = vMaestrosBL.pr_GetTipoVuelo("001")
        UcViaje1.cboTipoVuelo.Properties.DataSource = tbTipo
        UcViaje1.cboTipoVuelo.Properties.DisplayMember = "NomTipo"
        UcViaje1.cboTipoVuelo.Properties.ValueMember = "CodTipo"
        UcViaje1.cboTipoVuelo.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("CodTipo", 20, "Tipo"))
        UcViaje1.cboTipoVuelo.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("NomTipo", 100, "Descripción"))
        UcViaje1.cboTipoVuelo.Properties.BestFit()
        UcViaje1.cboTipoVuelo.Properties.PopupWidth = 300
        UcViaje1.cboTipoVuelo.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboTipoVuelo.Properties.AutoSearchColumnIndex = 1
        ' cargo el estado
        tbEstado = vMaestrosBL.pr_GetEstadoVuelo()
        UcViaje1.cboEstado.Properties.DataSource = tbEstado
        UcViaje1.cboEstado.Properties.DisplayMember = "desEstadoVuelo"
        UcViaje1.cboEstado.Properties.ValueMember = "codEstadoVuelo"
        UcViaje1.cboEstado.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("codEstadoVuelo", 15, "Estado"))
        UcViaje1.cboEstado.Properties.Columns.Add(New DevExpress.XtraEditors.Controls.LookUpColumnInfo("desEstadoVuelo", 60, "Descripcion"))
        UcViaje1.cboEstado.Properties.BestFit()
        UcViaje1.cboEstado.Properties.PopupWidth = 120
        UcViaje1.cboEstado.Properties.SearchMode = SearchMode.AutoComplete
        UcViaje1.cboEstado.Properties.AutoSearchColumnIndex = 1
    End Sub

    Private Sub prl_EstadoCajas(ByVal lFlag As Boolean)
        UcViaje1.cboContratante.Properties.ReadOnly = lFlag
        UcViaje1.txtCodViaje.Properties.ReadOnly = True
        UcViaje1.cboFchViaje.Properties.ReadOnly = lFlag
        UcViaje1.cboOrigen.Properties.ReadOnly = lFlag
        UcViaje1.cboCiaAviacion.Properties.ReadOnly = lFlag
        UcViaje1.cboTipoVuelo.Properties.ReadOnly = lFlag
        UcViaje1.txtNroCupos.Properties.ReadOnly = lFlag
        UcViaje1.txtPsoMaxViaje.Properties.ReadOnly = lFlag
        UcViaje1.txtObservacion.Properties.ReadOnly = lFlag
        UcViaje1.cboEstado.Properties.ReadOnly = lFlag
    End Sub

    Private Sub prl_LimpiarCajas()
        UcViaje1.cboContratante.EditValue = "01"
        UcViaje1.txtCodViaje.Text = ""
        UcViaje1.cboFchViaje.Text = Date.Today
        UcViaje1.cboOrigen.EditValue = ""
        UcViaje1.cboCiaAviacion.EditValue = ""
        UcViaje1.cboTipoVuelo.EditValue = ""
        UcViaje1.txtNroCupos.Text = ""
        UcViaje1.txtPsoMaxViaje.Text = ""
        UcViaje1.txtObservacion.Text = ""
        UcViaje1.cboEstado.EditValue = "1"
    End Sub

    Private Sub prl_CargarCajas(ByVal pCod As String)
        vProViaBE = vProViaBL.pr_TraerProgramaViaje(pCod)
        UcViaje1.txtCodViaje.Text = vProViaBE.CodViaje
        UcViaje1.cboContratante.EditValue = vProViaBE.CodContrataViaje.Trim
        UcViaje1.cboCiaAviacion.EditValue = vProViaBE.CodEmpresa.Trim
        UcViaje1.cboOrigen.EditValue = vProViaBE.CodLugarOrigen.Trim & vProViaBE.CodLugarDestino.Trim
        UcViaje1.cboTipoVuelo.EditValue = vProViaBE.CodTipoVuelo.Trim
        UcViaje1.cboFchViaje.Text = vProViaBE.FchViaje
        UcViaje1.txtNroCupos.Text = vProViaBE.NroCupos
        UcViaje1.txtPsoMaxViaje.Text = vProViaBE.PsoMaxViaje
        UcViaje1.txtObservacion.Text = vProViaBE.ObsViaje
        UcViaje1.cboEstado.EditValue = vProViaBE.EstadoViaje
    End Sub

#End Region

#Region "Miscelaneos"

    Private Sub prl_CargarLista()
        ' cargo la grilla con el detalle
        UcViaje1.GridControl1.DataSource = vProViaBL.pr_Listar_ProgramaViaje(p_coduser, 2)
    End Sub

    Private Sub prl_CambioRegistro()
        If UcViaje1.GridView1.RowCount > 0 Then
            Dim Rows As New ArrayList()
            Rows.Add(UcViaje1.GridView1.GetDataRow(UcViaje1.GridView1.GetSelectedRows()(0)))
            Dim Row As DataRow = CType(Rows(0), DataRow)
            If Not Row Is Nothing Then
                prl_CargarCajas(Row("codViaje").ToString())
            End If
        Else
            prl_LimpiarCajas()
        End If
    End Sub

    Private Sub prl_CargarTipoVuelo(ByVal sender As Object, ByVal e As System.EventArgs)
        tbTipo = vMaestrosBL.pr_GetTipoVuelo(UcViaje1.cboCiaAviacion.EditValue)
        UcViaje1.cboTipoVuelo.Properties.DataSource = tbTipo
    End Sub

    Private Sub prl_CargarCupos(ByVal sender As Object, ByVal e As System.EventArgs)
        UcViaje1.txtNroCupos.Text = vProViaBL.pr_CargarTipoVueloCupos(UcViaje1.cboTipoVuelo.EditValue)
        UcViaje1.txtNroCupos.Refresh()
    End Sub

    Private Sub prl_CrearCodigo(ByVal sender As Object, ByVal e As System.EventArgs)
        If UcViaje1.txtCodViaje.Text.Trim = "" Then
            UcViaje1.txtCodViaje.Text = vProViaBL.pr_NuevoCorrelativo(Microsoft.VisualBasic.Left(UcViaje1.cboOrigen.Text, 1))
        End If
    End Sub

#End Region

#Region "Actualizacion de datos"

    Private Sub prl_RegistroNuevo()
        prl_InicializarBoton(True)
        prl_EstadoCajas(False)
        prl_LimpiarCajas()
        UcViaje1.cboContratante.Properties.ReadOnly = False
        UcViaje1.cboOrigen.Properties.ReadOnly = False
        UcViaje1.txtCodViaje.Visible = False
        SLTitulo.Text = "Mantenimiento de Vuelos (AGREGAR)"
        UcViaje1.cboContratante.Focus()
        nopc = 1
    End Sub

    Private Sub prl_RegistroModificar()
        If UcViaje1.cboEstado.EditValue >= "2" Then
            Dim sdesestado As String = IIf(UcViaje1.cboEstado.EditValue = "2", "Cerrado Parcial", IIf(UcViaje1.cboEstado.EditValue = "3", "Cerrado", IIf(UcViaje1.cboEstado.EditValue = "4", "Provisionado", "Cancelado")))
            MsgBox(String.Format("El vuelo está {0}...", sdesestado), MsgBoxStyle.Critical, "Modificación prohibida")
        Else
            prl_InicializarBoton(True)
            prl_EstadoCajas(False)
            UcViaje1.cboContratante.Properties.ReadOnly = True
            UcViaje1.cboOrigen.Properties.ReadOnly = True
            UcViaje1.txtCodViaje.Visible = True
            SLTitulo.Text = "Mantenimiento de Vuelos (MODIFICAR)"
            UcViaje1.cboCiaAviacion.Focus()
            nopc = 2
        End If
    End Sub

    Private Sub prl_RegistroDardeBaja()
        If UcViaje1.cboEstado.EditValue >= "2" Then
            Dim sdesestado As String = IIf(UcViaje1.cboEstado.EditValue = "2", "Cerrado Parcial", IIf(UcViaje1.cboEstado.EditValue = "3", "Cerrado", IIf(UcViaje1.cboEstado.EditValue = "4", "Provisionado", "Cancelado")))
            MsgBox(String.Format("El vuelo está {0}...", sdesestado), MsgBoxStyle.Critical, "Eliminación prohibida")
        Else
            If MsgBox("¿Está seguro de eliminar el vuelo?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Desición") = MsgBoxResult.Yes Then
                Dim lFlgOka As Boolean
                lFlgOka = vProViaBL.pr_EliminarProgramaViaje(UcViaje1.txtCodViaje.Text)
                If lFlgOka = True Then
                    MsgBox("La eliminación del vuelo se realizó con éxito...", MsgBoxStyle.Information, "Proceso éxitoso")
                Else
                    MsgBox("Ha ocurrido un error...", MsgBoxStyle.Critical, "Proceso con problemas")
                End If
                prl_CargarLista()
            End If
        End If
    End Sub

    Private Sub prl_Imprimir()
        printableComponentLink1.ShowPreview()
    End Sub

    Private Sub prl_RegistroGrabar()
        If UcViaje1.DxValidationProvider1.Validate Then
            Dim sOrigen As String = Strings.Left(UcViaje1.cboOrigen.EditValue, 3)
            Dim sDestino As String = Strings.Right(UcViaje1.cboOrigen.EditValue, 3)
            vProViaBE.CodContrataViaje = UcViaje1.cboContratante.EditValue
            vProViaBE.CodViaje = UcViaje1.txtCodViaje.Text
            vProViaBE.FchViaje = UcViaje1.cboFchViaje.Text
            vProViaBE.CodLugarOrigen = sOrigen
            vProViaBE.CodLugarDestino = sDestino
            vProViaBE.CodEmpresa = UcViaje1.cboCiaAviacion.EditValue
            vProViaBE.NroCupos = UcViaje1.txtNroCupos.Text
            vProViaBE.PsoMaxViaje = UcViaje1.txtPsoMaxViaje.Text
            vProViaBE.ObsViaje = UcViaje1.txtObservacion.Text
            vProViaBE.EstadoViaje = UcViaje1.cboEstado.EditValue
            vProViaBE.CodTipoVuelo = UcViaje1.cboTipoVuelo.EditValue
            vProViaBE.CodCreadopor = p_coduser
            vProViaBE.FchCreado = DateTime.Now
            vProViaBE.CodModificadopor = p_coduser
            vProViaBE.FchModificado = DateTime.Now
            Dim lflgCorrecto As Boolean = True
            Dim dfchsis As DateTime = vMaestrosBL.pr_GetDate()
            Dim dfecha As DateTime = UcViaje1.cboFchViaje.Text
            Dim diasminino As Double = DateDiff(("d"), dfecha, dfchsis)
            Dim diasmaximo As Double = DateDiff(("d"), dfchsis, dfecha)
            If (diasminino > 0) Then
                MsgBox("La fecha de vuelo no puede ser menor a la fecha actual...", MsgBoxStyle.Critical, "Proceso con problemas")
                lflgCorrecto = False
            Else
                If (diasmaximo > 180) Then
                    MsgBox("La fecha de vuelo no puede ser mayor por 6 meses a la fecha actual...", MsgBoxStyle.Critical, "Proceso con problemas")
                    lflgCorrecto = False
                End If
            End If
            If lflgCorrecto Then
                Dim lFlgOka As Boolean
                If nopc = 1 Then
                    lFlgOka = vProViaBL.pr_CrearProgramaViaje(vProViaBE)
                Else
                    lFlgOka = vProViaBL.pr_ModificarProgramaViaje(vProViaBE)
                End If
                If lFlgOka = True Then
                    MsgBox("La actualización del vuelo se realizó con éxito...", MsgBoxStyle.Information, "Proceso éxitoso")
                    SLTitulo.Text = "Mantenimiento de Vuelos"
                Else
                    MsgBox("Ha ocurrido un error...", MsgBoxStyle.Critical, "Proceso con problemas")
                End If
                prl_InicializarBoton(False)
                prl_EstadoCajas(True)
                prl_CargarLista()
            Else
                UcViaje1.cboOrigen.Focus()
            End If
        Else
            UcViaje1.cboOrigen.Focus()
        End If
    End Sub

    Private Sub prl_RegistroCancelar()
        prl_CambioRegistro()
        prl_InicializarBoton(False)
        prl_EstadoCajas(True)
        SLTitulo.Text = "Mantenimiento de Vuelos"
        UcViaje1.DxValidationProvider1.Validate()
    End Sub
#End Region

End Class